Test suspend and resume cycles of the TPM front- and backend.
authoremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Tue, 21 Mar 2006 00:28:29 +0000 (01:28 +0100)
committeremellor@leeni.uk.xensource.com <emellor@leeni.uk.xensource.com>
Tue, 21 Mar 2006 00:28:29 +0000 (01:28 +0100)
Now that sysfs is mounted in the RAM disk of the test environment, the
test code does not need to do this anymore. This patch also simplifies
previous tests and the APIs used there. If prerequisites are not met
(vtpm manager not running) the patch will 'skip'.

Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
tools/xm-test/tests/vtpm/01_vtpm-list_pos.py
tools/xm-test/tests/vtpm/02_vtpm-cat_pcrs.py
tools/xm-test/tests/vtpm/Makefile.am
xen-unstable.hg/tools/xm-test/tests/vtpm/03_vtpm-susp_res.py [new file with mode: 0644]

index 00d5b3f8b24db8b6d99adf63584678dc4b1650bf..0aa45f1d37cdccf654c83d534f79630ad09181cc 100644 (file)
@@ -1,18 +1,20 @@
 #!/usr/bin/python
 
 # Copyright (C) International Business Machines Corp., 2006
-# Author: Stefan Berger <stefanb@us.ibm.com)
+# Author: Stefan Berger <stefanb@us.ibm.com>
 
 # Positive Test: create domain with virtual TPM attached at build time,
 #                verify list
 
 
 from XmTestLib import *
+import commands
+import os
 
 def vtpm_cleanup(domName):
-       # Since this is only a temporary domain I clean up the domain from the
-       # virtual TPM directory
-       traceCommand("/etc/xen/scripts/vtpm-delete %s" % domName)
+    # Since this is only a temporary domain I clean up the domain from the
+    # virtual TPM directory
+    os.system("/etc/xen/scripts/vtpm-delete %s" % domName)
 
 if ENABLE_HVM_SUPPORT:
     SKIP("vtpm-list not supported for HVM domains")
index 5e00163df93a8992995a99f73a1b985b1923a2ad..18021380d8a0cd62674a26b71754b8f89660b256 100644 (file)
@@ -1,28 +1,30 @@
 #!/usr/bin/python
 
 # Copyright (C) International Business Machines Corp., 2006
-# Author: Stefan Berger <stefanb@us.ibm.com)
+# Author: Stefan Berger <stefanb@us.ibm.com>
 
 # Positive Test: create domain with virtual TPM attached at build time,
 #                check list of pcrs
 
 from XmTestLib import *
+import commands
+import os
+import os.path
 
 def vtpm_cleanup(domName):
-       # Since this is only a temporary domain I clean up the domain from the
-       # virtual TPM directory
-       traceCommand("/etc/xen/scripts/vtpm-delete %s" % domName)
+    # Since this is only a temporary domain I clean up the domain from the
+    # virtual TPM directory
+    os.system("/etc/xen/scripts/vtpm-delete %s" % domName)
 
 if ENABLE_HVM_SUPPORT:
     SKIP("vtpm-list not supported for HVM domains")
 
-status, output = traceCommand("ls /dev/tpm0")
-if re.search("No such file or directory",output):
+if os.path.exists("/dev/tpm0") == False:
     SKIP("This machine has no hardware TPM; cannot run this test")
 
-status, output = traceCommand("ps aux | grep vtpm_manager | grep -v grep")
+output = commands.getoutput("ps aux | grep vtpm_manager | grep -v grep")
 if output == "":
-    FAIL("virtual TPM manager must be started to run this test")
+    SKIP("virtual TPM manager must be started to run this test")
 
 # vtpm manager has been detected
 config = {"vtpm":"instance=1,backend=0"}
@@ -46,21 +48,11 @@ except ConsoleError, e:
 
 try:
     console.sendInput("input")
-    run = console.runCmd("ls /sys")
 except ConsoleError, e:
     saveLog(console.getHistory())
     vtpm_cleanup(domName)
     FAIL(str(e))
 
-if re.search("No such file",run["output"]):
-    try:
-        run = console.runCmd("mkdir /sys")
-        run = console.runCmd("mount -t sysfs /sys /sys")
-    except ConsoleError, e:
-        saveLog(console.getHistory())
-        vtpm_cleanup(domName)
-        FAIL(str(e))
-
 try:
     run = console.runCmd("cat /sys/devices/platform/tpm_vtpm/pcrs")
 except ConsoleError, e:
index 5b7c86f4aad892d5b9a7f0032f6f76a463efd0c4..5ee4cfb071d5f8c5f93c627ee3ec839cff0d08ca 100644 (file)
@@ -2,7 +2,8 @@
 SUBDIRS =
 
 TESTS = 01_vtpm-list_pos.test \
-        02_vtpm-cat_pcrs.test
+        02_vtpm-cat_pcrs.test \
+        03_vtpm-susp_res.test
 
 XFAIL_TESTS =
 
diff --git a/xen-unstable.hg/tools/xm-test/tests/vtpm/03_vtpm-susp_res.py b/xen-unstable.hg/tools/xm-test/tests/vtpm/03_vtpm-susp_res.py
new file mode 100644 (file)
index 0000000..f4f6191
--- /dev/null
@@ -0,0 +1,120 @@
+#!/usr/bin/python
+
+# Copyright (C) International Business Machines Corp., 2006
+# Author: Stefan Berger <stefanb@us.ibm.com>
+
+# Positive Test: create domain with virtual TPM attached at build time,
+#                check list of pcrs; suspend and resume the domain and
+#                check list of pcrs again
+
+from XmTestLib import *
+import commands
+import os
+import os.path
+
+def vtpm_cleanup(domName):
+    # Since this is only a temporary domain I clean up the domain from the
+    # virtual TPM directory
+    os.system("/etc/xen/scripts/vtpm-delete %s" % domName)
+
+if ENABLE_HVM_SUPPORT:
+    SKIP("vtpm-list not supported for HVM domains")
+
+if os.path.exists("/dev/tpm0") == False:
+    SKIP("This machine has no hardware TPM; cannot run this test")
+
+output = commands.getoutput("ps aux | grep vtpm_manager | grep -v grep")
+if output == "":
+    SKIP("virtual TPM manager must be started to run this test")
+
+# vtpm manager has been detected
+config = {"vtpm":"instance=1,backend=0"}
+domain = XmTestDomain(extraConfig=config)
+
+try:
+    domain.start()
+except DomainError, e:
+    if verbose:
+        print e.extra
+    vtpm_cleanup(domain.getName())
+    FAIL("Unable to create domain")
+
+domName = domain.getName()
+
+try:
+    console = XmConsole(domain.getName())
+except ConsoleError, e:
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+try:
+    console.sendInput("input")
+except ConsoleError, e:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+try:
+    run = console.runCmd("cat /sys/devices/platform/tpm_vtpm/pcrs")
+except ConsoleError, e:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+if re.search("No such file",run["output"]):
+    FAIL("TPM frontend support not compiled into (domU?) kernel")
+
+console.closeConsole()
+
+try:
+    status, ouptut = traceCommand("xm save %s %s.save" %
+                                  (domName, domName),
+                                  timeout=30)
+except TimeoutError, e:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+if status != 0:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL("xm save did not succeed")
+
+try:
+    status, ouptut = traceCommand("xm restore %s.save" %
+                                  (domName),
+                                  timeout=30)
+except TimeoutError, e:
+    os.remove("%s.save" % domName)
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+os.remove("%s.save" % domName)
+
+if status != 0:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL("xm restore did not succeed")
+
+try:
+    console = XmConsole(domain.getName())
+except ConsoleError, e:
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+try:
+    run = console.runCmd("cat /sys/devices/platform/tpm_vtpm/pcrs")
+except ConsoleError, e:
+    saveLog(console.getHistory())
+    vtpm_cleanup(domName)
+    FAIL(str(e))
+
+console.closeConsole()
+
+domain.stop()
+
+vtpm_cleanup(domName)
+
+if not re.search("PCR-00:",run["output"]):
+       FAIL("Virtual TPM is not working correctly on /dev/vtpm on backend side")